#pragma once


namespace Be
{
	class StageComponent;
}

namespace Be
{
	class StageNode
		: public Node
	{
	public:
		struct Seed
		{
			std::wstring m_InitStageName;
		};

	public:
		StageNode(Entity* p_pEntity);
		virtual ~StageNode();

	public:
		ComPtr<StageComponent> m_StageComponent;

	public:
		void CheckNextStage(std::wstring p_NextStageName);

	private:
		bool InitStage(std::wstring p_StageName);
		void ReleaseStage();

	private:
		std::wstring m_StageName;
	};
}

namespace Be
{
	class StageSystem
		: public System<StageNode>
	{
	private:
		StageSystem();
		virtual ~StageSystem();

	public:
		static StageSystem& Inst();

	protected:
		virtual void OnRegister(StageNode* p_pNode, const StageNode::Seed& p_rSeed);
		virtual void OnUnregister(StageNode* p_pNode);
		virtual void OnUpdate(StageNode* p_pNode);

	private:
	};
}